import { getToken, setToken, removeToken } from '@/utils/auth' // 引入存贮cookie token的方法
import { login, getUserInfo, getUserDetailById } from '@/api/user' // 引入登录接口方法  获取用户信息的方法  用户头像
import { resetRouter } from '@/router/index'

const state = {
  token: getToken(), // 把缓存里面的token赋值给vuex
  userInfo: {} // 存贮用户基本信息的地方 一定要是{}
}

const mutations = {
  setToken(state, token) { // 登录后把最新的token赋值给vuex
    state.token = token
    setToken(token) // 把最新的token赋值给缓存cookie
  },
  removeToken(state) {
    state.token = null // 退出后把vuex里面的token赋值为null 删除原来的token
    removeToken() // 把cookie里面的token值删除
  },
  setUserInfo(state, result) { // 把获取的用户信息赋值
    state.userInfo = result
  },
  removeUserInfo(state) { // 把获取的用户信息全部清空
    state.userInfo = {}
  }
}

const actions = {
  // 登录请求的方法
  async login(context, data) {
    const result = await login(data)
    context.commit('setToken', result) // 请求成功 拿到token
  },
  // 请求用户信息的方法
  async getUserInfo(context) {
    const result = await getUserInfo()
    const datainInfo = await getUserDetailById(result.userId) // 根据用户id获取用户头像
    context.commit('setUserInfo', { ...result, ...datainInfo })// 把后台请求的数据赋值
    // 把获取到的用户信息return出去 方便做权限管理
    return result
  },
  // 退出登录的方法
  logout(context) {
    // 退出登录后清除vuex的用户信息和token数据
    context.commit('removeToken')// 清除token
    context.commit('removeUserInfo') // 清除用户信息
    resetRouter() // 清空路由表
    // context.commit('permission/setRoutes', [], { root: true })
    context.commit('permission/setRoutes', [], { root: true })
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
